Modern computer systems are generally formed of numerous components that are coupled together to interoperate and perform various processing functions under control of a central processor, commonly referred to as a central processing unit (CPU). Most systems typically include a collection of semiconductor devices including processors, peripheral devices, dedicated processing units and so forth, in addition to additional semiconductor devices that act as a system memory to provide storage for information used by the processing units. In many systems, multiple memories are present, each of which can be associated with a given processor that thus acts as local memory for the corresponding processor. However, data located in a memory associated with a first processor may need to be accessed by another processor.
To maintain the coherency of data across the system, a cache coherency protocol such as a directory-based protocol or a snoop broadcast-based protocol may be implemented in a system. In a directory-based cache coherence protocol, agents that guard the memory, often referred to as home agents (HAs), collectively maintain a directory that tracks where and in what state each cacheline is cached in the system. A caching agent (CA) that seeks to acquire a cacheline sends a request to a HA, which looks up the directory and sends messages, commonly referred to as snoops, to only those CAs which the directory indicates may have cached copies of the line. However this lookup can increase latency, as the home agent does not launch the snoop until the directory lookup is completed.
Instead in a broadcast protocol, typically no directory exists and a CA or HA broadcasts a snoop to all peer caching agents. This type of protocol can improve latency where one of the caching agents has the most recent copy of the requested data. However, there can be higher latencies when the data is obtained from memory if the snoop latency is longer than memory fetch latency, as in this case the data is held until all snoop responses have been received and processed by the HA. That is, return of data from memory is held until snoop responses from all agents are received.